Skip to content

Picolibc cplusplus #620

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Feb 20, 2023
Merged

Conversation

tejlmand
Copy link
Contributor

@tejlmand tejlmand commented Jan 13, 2023

Add TOOLCHAIN_HAS_PICOLIBC as CMake variable now that Zephyr SDK has full support for picolibc, including C++.

This follows the principle used for TOOLCHAIN_HAS_NEWLIB.

Set PICOLIBC_SUPPORTED when using Zephyr SDK, as Picolibc is now always supported with this Zephyr SDK, including C++ development.

This PR is based on comments given in: zephyrproject-rtos/zephyr#53338

DNM until feedback is given by @keith-packard

Indicate to the build system that Zephyr SDK has full support for
Picolibc.

Signed-off-by: Torsten Rasmussen <[email protected]>
Zephyr SDK now supports Picolibc as built-in for both C and C++
development.

Signed-off-by: Torsten Rasmussen <[email protected]>

config PICOLIBC_SUPPORTED
def_bool y
depends on "$(ZEPHYR_TOOLCHAIN_VARIANT)" = "zephyr"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What effect would this have on other toolchains? For instance, you can add picolibc support to the arm embedded toolkit by downloading the picolibc overlay, you can build native a crosstool-ng toolchain which can have picolibc support included, or you could be using the native Debian arm-none-eabi toolchain, which has picolibc support.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What effect would this have on other toolchains?

None.
This only sets the setting to y when Zephyr SDK is used.
When another toolchain is used, then the setting inside the Zephyr repo is used.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oh. How does this detect whether the user is building the picolibc module? Because you could be using the zephyr toolchain but not using the picolibc bits it provides, and that wouldn't work for C++.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This doesn't allow Zephyr to restrict picolibc usage for boards that don't work, even if picolibc works for the target architecture (like qemu_x86_tiny). Perhaps this should use a new variable, TOOLCHAIN_PICOLIBC_SUPPORTED, and that variable could be used in the computation of PICOLIBC_SUPPORTED?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This doesn't allow Zephyr to restrict picolibc usage for boards that don't work, even if picolibc works for the target architecture (like qemu_x86_tiny).

Correct, so if we do have such boards then we need to consider how to handle them.

What is the reason that a given board would impact the use of picolibc ?
Especially as from your description, the architecture itself is supported.
(and is it really the board, and not the SoC which are restricting picolibc ?)

Do you have some concrete examples ?

Probably this is something which should be handle directly at the board, and the board Kconfig in fact has a possibility to default the TOOLCHAIN_PICOLIBC_SUPPORTED to n if this is needed.

Copy link
Contributor

@keith-packard keith-packard left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yup, I think we've got this sorted out.

@keith-packard keith-packard removed the DNM DO NOT MERGE label Jan 17, 2023
@stephanosio
Copy link
Member

Will merge this for now; though, it will likely soon be completely reworked.

@stephanosio stephanosio merged commit 1c857f0 into zephyrproject-rtos:main Feb 20, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants